iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
0

最近因為剛好幫朋友寫個爬蟲,在撰寫的過程中發現這是個好素材,所以就拿來用了.

所以我們就來寫個爬蟲吧

以下的會以 .Net Core 2.0 ~ 2.1 (就是還沒release的那一版) 為範例環境

先做一次概略描述

爬蟲感覺功能需求如下:

  • 具有HttpReqeuest, HttpResponse 這樣的站台資訊發送與接收
  • 可以解析抓回來的資訊
  • 解析完有後續還有一個目的 (總不是爬完吃飽沒事幹吧)

感覺好像很複雜,換一個方式來呈現我們的需求吧

  • HttpClient
  • HtmlAgilityPack
  • 先隨便寫個目的吧

所以我們就可以很快速度生成一段code 如下並附加一些解讀 (此註解寫法非正規,僅為表現效果而做):

public class Crawler                                          // 爬蟲
{
    // 依照參數網址開始運行並回傳結果
    public List<HtmlNode> Start(string url)                   
    {
        // 建立Httpclient物件
        var client = new HttpClient();                        
        
        // 用client以非同步 GET 的方式Request指定網址取得回應並等待結果
        var res = client.GetAsync(url).Result;                
        
        //將回應的Content再以非同步的方式
        //讀取內容串流並等待結果
        var stream = res.Content.ReadAsStreamAsync().Result;
        
        // 建立HtmlDocument物件
        var docs = new HtmlDocument();                        
        
        // 讀取剛剛取出的串流
        docs.Load(stream);                                    
        
        // 回傳HtmlDocumentNode中 所有Element名稱為"a"的Element
        // 並且放入List中回傳
        return docs.DocumentNode.Elements("a").ToList();
    }
}

這樣的寫法所對應出來的描述,大概就像是這樣

而這樣的描述與這樣的程式碼也許看起來沒有什麼問題

那接下來就來了解一下這次的主題會如何檢驗這段程式吧

備註

  • .net core 相關sdk 與 runtime 可至下方官方來源取得
    • 微軟官網
    • 覺得官網沒有工程師的feel 可以至Github
    • 你說工程師就是要用Script來全自動安裝?
  • 此範例程式內容主軸並非完整達成crawler 所以任何細節請參考以crawler為主題的內容為主
  • 程式專案Github

上一篇
Day0 - 在開始之前~說來話長阿~~
下一篇
Day-3 能不能用一句話說完!?
系列文
如何讓程式碼告訴你他在做什麼?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言